/*
 * Copyright (C) 2025 Thomas Akehurst
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.tomakehurst.wiremock.db.service;

import com.github.tomakehurst.wiremock.stubbing.StubMapping;

import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;

/**
 * 单存根业务接口
 * 定义单存根的保存、删除、查询等核心能力，自动关联多存根扩展表
 */
public interface StubMappingService {

  /**
   * 保存单存根（自动创建/更新关联的多存根扩展记录，确保事务一致性）
   * @param stubMapping 待保存的单存根
   */
  void save(StubMapping stubMapping);

  /**
   * 根据ID删除单存根
   * @param id 单存根ID
   */
  void deleteById(UUID id);

  /**
   * 删除所有单存根（不含多存根文件中的存根）
   */
  void deleteAll();

  /**
   * 查询所有单存根
   * @return 所有单存根列表
   */
  List<StubMapping> findAll();

  /**
   * 根据多存根文件ID（contentId）查询关联的单存根
   * @param contentId 多存根文件ID
   * @return 关联的单存根列表
   */
  List<StubMapping> findByContentId(String contentId);

  /**
   * 条件分页查询单存根（支持需求ID、权限状态、创建人ID筛选）
   * @param demandId 需求ID（可选，null则不筛选）
   * @param createUserId 创建人ID（可选，null则不筛选）
   * @param pageNum 页码（默认1）
   * @param pageSize 每页条数（默认10）
   * @return 符合条件的单存根列表
   */
  List<StubMapping> findByConditions(
          String name,
          String demandId,      // 原有：需求编号
          String createUserId,  // 原有：创建者
          LocalDateTime updatedAt,
          Integer pageNum,
          Integer pageSize
  );

}
